1. ОБЗОР SWING 

В стандарт Java входит два пакета для создания оконного пользовательского интерфейса: AWT и его надстройка Swing. Компоненты Swing имеют расширенные возможности по сравнению с аналогичными AWT компонентами, поэтому упор будет сделан на них. Во-вторых, в отличие от AWT компоненты Swing не содержат платформо-зависимого кода. 

1.1. Контейнеры верхнего уровня 

JApplet - главное окно апплета;

JFrame - окно приложения;

JDialog - диалог приложения;

JColorChooser - диалог выбора цвета;

JFileChooser - диалог выбора файлов и директорий;

FileDialog - диалог выбора файлов и директорий (AWT компонент). 

1.2. Простые контейнеры

 JPanel - простая панель для группировки элементов, включая вложенные панели;

·         JToolBar - панель инструментов (обычно это кнопки);

JScroolPane - панель прокрутки, позволяющая прокручивать содержимое дочернего элемента;

JDesktopPane - контейнер для создания виртуального рабочего стола или приложений на основе MDI (multiple-document interface);

JEditorPane, JTextPane - контейнеры для отображения сложного документа как HTML или RTF;

·         JTabbedPane - контейнер для управления закладками;

JSplitPane - контейнер, разделяющий два элемента и позволяющий пользователю изменять их размер.

1.3. Элементы интерфейса 

Следующие элементы управления могут использоваться и как контейнеры, так как наследуются от класса java.awt.Container.

JButton - кнопка;

JCheckBox - кнопка-флажок;

JComboBox - выпадающий список;

JLabel - метка, надпись;

JList - список;

JPasswordField - текстовое поле для скрытого ввода;

JProgressBar - компонент для отображения числа в некотором диапазоне;

JRadioButton - переключатели, радио-кнопки, обычно используется с компонентом ButtonGroup;

JSlider - компонент позволяющий выбрать значение из заданного диапазона;

JSpinner - компонент позволяющий выбрать значение из указанной последовательности;

JTable - таблица;

JTextField - однострочное текстовое поле;

JFormattedTextField - однострочное текстовое поле, позволяющее вводить значения в определенном формате;

JTextArea - многострочное текстовое поле;

JTree - дерево.

2. ОСНОВНЫЕ СОБЫТИЯ КОМПОНЕТ 

№ п/п

Событие

Назначение

1.

actionPerformed

Нажатие на компонент

2.

valueChanged

Изменение выбранного значения из списка (для JList)

3.

stateChanged

Изменение выбранного значения из списка (для JSlider, JSpinner)

4.

adjustmentValueChanged

Изменение выбранного значения из списка (для JScrollBar)

5.

keyTyped

Ввод символа с клавиатуры

6.

keyPressed

Нажатие кнопки на клавиатуре

7.

keyReleased

Отжатие кнопки на клавиатуре

8.

mousePressed

Нажатие кнопки мыши

9.

mouseClicked

Отжатие кнопки мыши

10.

mouseReleased

Отжатие кнопки мыши с выделением

11.

mouseEntered

Перемещение мыши над компонентом

12.

mouseExited

Убирание мыши с компонента

13.

mouseWheelMoved

Прокрутка колеса мышки

14.

focusGained

Получение фокуса ввода

15.

focusLost

Потеря фокуса ввода

3. ОБЫЧНОЕ ОКНО «JFrame» И МОДАЛЬНОЕ ОКНО «JDialog»

Окно «JFrame» для создания оконного приложения в Java. Это основной контейнер, на котором располагаются другие компоненты, создающие внешний вид и интерфейс программы.

Модальное окно служит JDialog для  создания вспомогательных окон, вызываемых по мере необходимости, из главного окна JFrame. Особенность окна JDialog состоит в том, что оно открывается в модальном режиме: пока данное окно не будет закрыто, в вызвавшем его основном окне JFrame будет приостановлена работа. Окна JDialog используются для выдачи диалогов «О программе», диалогов подтверждения удаления и т.п. 

№ п/п

Свойство

Назначение

1.

title

Заголовок формы

2.

resizable

Разрешение изменения размеров формы

3.

undecorated

Убирание рамки и заголовка окна

4.

defaultCloseOperation

Действие окна при его закрытии:

EXIT_ON_CLOSE – выйти из программы (установка по умолчанию для JFrame);

DISPOSE – удалиться из памяти (окно больше не нужно) (установка по умолчанию для JDialog);

HIDE – спрятаться в памяти (для повторного вызова);

DO_NOTHING – ничего не делать (окно не закроется).

5.

enabled

Доступность формы

6.

alwaysOnTop

Всегда поверх других окон

7.

cursor

Вид курсора

 

№ п/п

События

Назначение

1.

windowOpened

Открытие/разворачивание окна

2.

windowActivated

Активация окна (переход в окно из другой программы)

3.

windowClosing

Закрытие окна

4.

windowDeactivated

Деактивация окна  (переход из окна в другую программу)

5.

windowIconified

Сворачивание окна

 

№ п/п

Методы

Назначение

1.

setVisible(true)

Включить видимость окна на экране

2.

setVisible(false)

Выключить видимость окна на экране

3.

dispose

Удалить окно

4.

isVisible

Проверка, видно ли окно на экране

5.

isActive

Проверка, активно ли окно (программа)

6.

setState(JFrame.ICONIFIED)

Свернуть окно

7.

setState(JFrame.NORMAL)

Развернуть окно

8.

setExtendedState(JFrame.MAXIMIZED_BOTH)

Распахнуть окно на весь экран

9.

setExtendedState(JFrame.NORMAL)

Восстановить нормальный размер окна

ПРИМЕЧАНИЕ: для закрытия всей программы используется следующий метод: «System.exit(0)»

3.1. Размещение формы по центру

Для размещения формы по центру необходимо нажать правой кнопкой мыши по окну, в контекстном меню выбрать пункт «Свойства». Далее необходимо выбрать вкладку «Код» и в ней указать:

1.       «Политика размещения формы» - «Создать код изменения размера»;

2.       «Создать размер» - нужно установить галочку на данном пункте;

3.       «Создать центрирование» - нужно установить галочку на данном пункте.

3.2. Размещение компонент на форме

Для свободного размещения компонент на форме необходимо нажать правой кнопкой мыши по окну, в контекстном меню выбрать пункт «Установить расположение». Далее необходимо выбрать значение «Нет размещения».

3.3. Установка внешнего вида окна в стиле «Windows»

Для установки внешнего вида окна в стиле «Windows», необходимо зайти в программный код окна (вкладка «Источник»), раскрыть весь программный код (нажав на значки «+»), и найти следующий фрагмент кода:

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

Далее, необходимо заменить слово "Nimbus" на слово «Windows», соблюдая регистр символов:

3.4. Изменение цвета формы

Для изменения цвета формы необходимо зайти в программный код окна (вкладка «Источник»), раскрыть весь программный код (нажав на значки «+»), и найти следующий фрагмент кода:

public NewJFrame() {

initComponents();

}

После строки «initComponents();» необходимо вставить дополнительную новую строку «this.getContentPane().setBackground(java.awt.Color.ORANGE);», где «ORANGE» - желаемый цвет формы:

public NewJFrame() {

initComponents();

this.getContentPane().setBackground(java.awt.Color.ORANGE);

// this.getContentPane().setBackground(new java.awt.Color(100, 100, 200)); // Цвет указан в формате RGB

}

3.5. Стандартные цвета

Название цвета

Цвет

1.

black

Черный

2.

blue

Синий

3.

cyan

Голубой

4.

darkGray

Темно-серый

5.

gray

Серый

6.

green

Зеленый

7.

lightGray

Светло-серый

8.

magenta

Пурпурный

9.

orange

Оранжевый

10.

pink

Розовый

11.

red

Красный

12.

white

Белый

13.

yellow

Желтый

3.6. Изменение иконки формы

Для изменения иконки формы, отображаемой в верхнем левом углу окна, необходимо:

1)       скинуть иконку формата «jpg» или «png» в папку, где располагаются файлы проекта с расширением «java» (например, «D:\WRK\Java\TSN_lab1\src\tsn_lab1»;

2)       зайти через инспектор объектов в свойство «iconImage»;

3)       установить использование свойства в значение «Изменяемый код»;

4)       в открывшемся окне ввести строку
 «
java.awt.Toolkit.getDefaultToolkit().createImage(getClass().getResource("icon.png"))» с именем иконки (в этом примере «icon.png») и нажать на кнопку «OK».

4. КНОПКА «JButton»

Кнопки служат для привязки к ним процедур, вызываемых при их нажатии.

п/п

Свойство

Назначение

1.

background

Цвет фона кнопки

2.

enabled

Доступность компонента

3.

font

Шрифт текста кнопки

4.

foreground

Цвет текста кнопки

5.

horizontalAlignment

Выравнивание текста кнопки и картинки по горизонтали

6.

horizontalTextPosition

Выравнивание текста кнопки по горизонтали

7.

icon

Картинка (jpeg, gif, png) или ссылка из сети

8.

text

Текст кнопки

9.

opaque

Непрозрачность фона

10.

border

Рамка

11.

componentPopupMenu

Привязка компонента всплывающего меню

12.

contentAreaFilled

Убирание у кнопки рамки и фона

13.

cursor

Вид курсора

14.

disabledIcon

Картинка кнопки при ее недоступности

15.

focusable

Разрешение фокуса ввода по клавише Tab

16.

iconTextGap

Отступ между картинкой и текстом

17.

label

Текст надписи кнопки

18.

pressedlcon

Картинка кнопки при нажатии

19.

rolloverIcon

Картинка кнопки при наведении мышки

20.

toolTipText

Всплывающая подсказка над компонентом

21.

verticalAlignment

Выравнивание текста и картинки по вертикали

22.

verticalTextPosition

Выравнивание текста по вертикали

23.

Высота

Высота кнопки

24.

Ширина

Ширина кнопки

5. КОМПОНЕНТ JPanel (панель)

Компонент JPanel служит для декоративных целей, а также как контейнер для размещения на нем других компонент.

Для произвольного размещения на панели компонент необходимо щелкнуть по панели правой кнопкой мыши, из контекстного меню выбрать опцию «Установить расположение» - «Нет размещения».

п/п

Свойство

Назначение

1.

border

Вид рамки у панели

2.

foreground

Цвет панели

3.

toolTipText

Всплывающая подсказка

 

п/п

Методы

Назначение

1.

setVisible

Включить/выключить видимость панели. При выключении видимости панель, и все компоненты на ней, становятся невидимыми, после включения видимости панель становится видимой и все компоненты на ней

5.1. Пример работы с панелью JPanel

private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {

// Включение/выключение видимости панели JPanel

if (jCheckBox1.isSelected()) { // Если флажок выбран, то включить видимость панели

jPanel1.setVisible(true); // Включить видимость панели

} else {

jPanel1.setVisible(false); // Выключить видимость панели

}

}

5.2. Виды рамок у панелей JPanel (свойство border)

6. КОМПОНЕНТ JTabbedPane (вкладки панели)

Компонент JTabbedPane служит для создания панелей вкладок. Для создания панелей вкладок необходимо:

1)  нанести компонент JTabbedPane;

2) нанести на компонент JTabbedPane нужное количество панелей JPanel. Каждая нанесенная панель будет являться вкладкой в компоненте JTabbedPane.

п/п

Свойство

Назначение

1.

selectedIndex

Номер активной вкладки (отсчет с 0)

2.

tabPlacement

Место расположения ярлыков вкладок (вверху, внизу, слева, справа)

3.

tabLayoutPolicy

Режим отображения ярлыков вкладок при множестве вкладок:

SCROLL_TAB_LAYOUT - вкладки в один ряд с прокруткой;

WRAP_TAB_LAYOUT - несколько рядов вкладок без прокрутки.

4.

font

Шрифт надписей вкладки

5.

foreground

Цвет надписей (ярлыков) панели

6.

border

Вид рамки у панели

7.

toolTipText

Всплывающая подсказка

8.

X

Положение верхнего левого угла компонента, координата X

9.

Y

Положение верхнего левого угла компонента, координата Y

10.

Ширина

Ширина компонента

11.

Высота

Высота компонента

 

п/п

События

Назначение

1.

stateChanged

Переключение активной вкладки

 

п/п

Методы

Назначение

1.

getSelectedIndex

Получение номера текущей (активной) вкладки (отсчет с 0)

2.

setSelectedIndex

Установка желаемой активной (текущей) вкладки (отсчет с 0)

3.

getTabCount

Получение количества вкладок в компоненте (отсчет с 1)

При добавлении панелей-вкладок JPanel  у панелей появляются дополнительные новые свойства:  «Заголовок вкладки» - для задания названия вкладки, «Значок вкладки» - для выбора картинки вкладки (располагается слева от заголовка вкладки), «Подсказка вкладки» - всплывающая подсказка при наведении курсора мыши на вкладку.

6.1. Пример работы с вкладками JTabbedPane

private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {

// Выдача номер текущей вкладки в JTabbedPane при переключении вкладок

JOptionPane.showMessageDialog(rootPane, String.valueOf(jTabbedPane1.getSelectedIndex()));

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

// Выдача количества вкладок в JTabbedPane

JOptionPane.showMessageDialog(rootPane, String.valueOf(jTabbedPane1.getTabCount()));

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

// Переключение активной вкладки в JTabbedPane

jTabbedPane1.setSelectedIndex(2);

}